#pragma once

#include "QueryPreprocessor.h"
#include "QueryEvaluator.h"
#include "QueryProjector.h"
#include "QueryExpressionParser.h"

class QueryProcessorWrapper {
private:
	QueryPreprocessor *mQueryPreprocessor; // Preprocessor for query validation and preprocessing
	QueryEvaluator *mQueryEvaluator; // Evaluator for query evaluation of preprocessed query
	QueryProjector *mQueryProjector; // Projector not used for prototype
public:
	QueryProcessorWrapper(QueryPreprocessor*, QueryEvaluator*, QueryProjector*);
	~QueryProcessorWrapper(void);

	// Evaluates a given queryInput and returns the answers as a vector of strings.
	// The returned vector can be empty.
	// Example queryInput: "Assign a; Select a such that Follows(a, 2)"
	std::vector<string> evaluateQuery(string queryInput);
};

